
/*#include <glibmm-2.4/glibmm/dispatcher.h>
#include <glibmm-2.4/glibmm/thread.h>*/


#include <interface.h>

INTERFACE::INTERFACE() :
/* Filtro de Pacotes */
active_thread(false),
regra_fp(true),
thread(0) {
    // Inicialização das váriaveis
    this->usuario_fw.clear();
    this->senha_fw.clear();
    this->servidor_fw.clear();
    this->sock = 0;

    this->msg = new char[BUFFER_SERVIDOR + 1];

    //this->bd = new banco();
    this->carregar = true;

    //this->msg = new char[BUFFER_SERVIDOR + 1];

    // Define a tela de login nome da tela, borda e tamanho
    this->dialog_login.set_title("Login - Firewall");
    this->dialog_login.set_border_width(1);
    this->dialog_login.set_size_request(300, 150);

    /* Inicio - Conteúdo da primeira linha */
    //Rótulo com o texto Usuário
    this->label_login = new Gtk::Label("Usuário:");
    this->hbox_login = new Gtk::HBox();
    this->hbox_login->pack_start(*this->label_login, true, true, 0);

    //Caixa de texto que recebe o usuário
    this->user.set_size_request(100);
    this->user.set_text("");
    this->hbox_login->pack_end(this->user, false, false, 0);
    this->dialog_login.get_vbox()->pack_start(*this->hbox_login, true, true, 0);
    /* Final - Conteúdo da primeira hbox */

    /* Inicio - Conteúdo da segunda linha */
    //Rótulo com o texto Senha
    this->label_login = new Gtk::Label("Senha:");
    this->hbox_login = new Gtk::HBox();
    this->hbox_login->pack_start(*this->label_login, true, true, 0);

    // Caixa de texto que recebe a senha
    // Aplicado opções para ocultar caracteres
    this->senha.set_size_request(100);
    this->senha.set_visibility(false); //Oculta caracteres
    this->senha.set_invisible_char('*'); //Define caracteres que apareceram ao digitar a senha
    this->senha.set_text("");
    this->hbox_login->pack_end(this->senha, false, false, 0);
    this->dialog_login.get_vbox()->pack_start(*this->hbox_login, true, true, 0);
    /* Fim - Conteúdo da segunda linha */

    Gtk::Box *box;

    // Insere o botão de OK na janela de login
    box = this->dialog_login.get_action_area();
    if (box) {
        // Insere texto do botão e ação ao clicar
        this->okLogin.set_label("OK");
        this->okLogin.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::ok_login_action));

        box->pack_start(this->okLogin);
    }

    // Insere o botão de Cancelar
    box = this->dialog_login.get_action_area();
    if (box) {
        // Insere texto no botão e ação ao clicar nele
        this->cancelar_login.set_label("Cancelar");
        this->cancelar_login.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::cancelar_login_action));

        box->pack_start(this->cancelar_login);
    }

    // Chama função ao encerra tela do login para desalocar recursos
    this->dialog_login.signal_hide().connect(sigc::mem_fun(*this, &INTERFACE::cancelar_login_action));

    // exibe todos elementos inseridos na janela
    this->dialog_login.show_all_children();
}

INTERFACE::~INTERFACE() {
    delete this->msg;

    if (this->active_thread) {
        this->thread->join();
    }
}

void INTERFACE::construct_interface() {

    this->bd = new banco(FILE_DB_FIREWALL);
    this->carregar = true;

    this->servidor_atualizado = true;

    this->flag_linha.clear();

    this->download_regras_firewall();

    this->cliente_fw.set_title("PFC II - Cliente Firewall");
    this->cliente_fw.set_border_width(10);
    this->cliente_fw.set_default_size(1000, 550);

    /*******************************************************************************/
    /*******************************************************************************/
    /*******************************************************************************/
    /*******************************************************************************/

    this->menubar = Gtk::manage(new Gtk::MenuBar());
    this->principal.pack_start(*this->menubar, Gtk::PACK_SHRINK, 0);

    this->menuitem_arquivo = Gtk::manage(new Gtk::MenuItem("_Arquivos", true));
    this->menubar->append(*this->menuitem_arquivo);
    this->filemenu = Gtk::manage(new Gtk::Menu());
    this->menuitem_arquivo->set_submenu(*this->filemenu);

    this->menuitem_sair = Gtk::manage(new Gtk::MenuItem("Sai_r", true));
    this->menuitem_sair->signal_activate().connect(sigc::mem_fun(*this, &INTERFACE::encerrar));
    this->filemenu->append(*this->menuitem_sair);

    this->menuitem_regras = Gtk::manage(new Gtk::MenuItem("_Regras", true));
    this->menubar->append(*this->menuitem_regras);
    this->regras_menu = Gtk::manage(new Gtk::Menu());
    this->menuitem_regras->set_submenu(*this->regras_menu);

    this->alterar = Gtk::manage(new Gtk::MenuItem("_Alterar", true));
    this->alterar->signal_activate().connect(sigc::mem_fun(*this, &INTERFACE::get_alterar_regra_firewall));
    this->regras_menu->append(*this->alterar);

    this->excluir = Gtk::manage(new Gtk::MenuItem("_Excluir", true));
    this->excluir->signal_activate().connect(sigc::mem_fun(*this, &INTERFACE::excluir_regra_firewall));
    this->regras_menu->append(*this->excluir);

    /*******************************************************************************/
    /*******************************************************************************/
    /*******************************************************************************/
    /*******************************************************************************/

    this->notebook.set_border_width(5);

    this->principal.pack_start(this->notebook);

    /**************************************************************/
    /********************* Inicio - Tabela ************************/
    /**************************************************************/

    this->notebook.append_page(this->vbox_tab, "Tabelas");

    this->vbox_tab.pack_start(this->elementos_tab, false, false, 0);

    this->label = new Gtk::Label("Linha:");
    this->elementos_tab.put(*this->label, 10, 10);
    this->elementos_tab.put(this->linha, 65, 7);
    this->adj_linha = Gtk::Adjustment::create(0, 0, QUANT_MAX, QUANT_INCREMENTO);
    this->linha.set_adjustment(this->adj_linha);
    this->linha.set_wrap();

    /************** Inserção das tabelas *********************/
    this->label = new Gtk::Label("Tabela:");
    this->elementos_tab.put(*this->label, 205, 10);
    this->elementos_tab.put(this->tabela, 265, 5);
    this->tabela.set_size_request(90);
    this->politica_padrao.set_label("Política \nPadrão");
    this->politica_padrao.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::opcoes_gera_politica_padrao));
    this->elementos_tab.put(this->politica_padrao, 370, 5);
    this->carrega_tabela();
    this->tabela.signal_changed().connect(sigc::mem_fun(*this, &INTERFACE::carrega_chain));
    /************** Inserção das tabelas *********************/

    /********* Inserção Label e Checkbox Chain ***************/
    this->label = new Gtk::Label("Chain:");
    this->elementos_tab.put(*this->label, 485, 10);
    this->elementos_tab.put(this->chain, 535, 5);
    this->chain.append(" ");
    this->chain.set_size_request(150);
    this->chain.signal_changed().connect(sigc::mem_fun(*this, &INTERFACE::carrega_target));
    /********* Inserção Label e Checkbox Chain ***************/

    /********* Inserção Label e Checkbox Alvos ***************/
    this->label = new Gtk::Label("Alvo:");
    this->elementos_tab.put(*this->label, 705, 10);
    this->elementos_tab.put(this->alvo, 750, 5);
    this->alvo.append(" ");
    this->alvo.set_size_request(200);
    this->alvo.signal_changed().connect(sigc::mem_fun(*this, &INTERFACE::carrega_option));
    /********* Inserção Label e Checkbox Alvos ***************/

    /****** Inserção Label e Checkbox Opções Alvos **********/
    this->label = new Gtk::Label("Opção:");
    this->elementos_tab.put(*this->label, 10, 50);
    this->opcao_alvo.set_size_request(150);
    this->elementos_tab.put(this->opcao_alvo, 65, 45);
    this->opcao_alvo.append(" ");
    this->opcao_alvo.signal_changed().connect(sigc::mem_fun(*this, &INTERFACE::habilita_parametros_option));
    /****** Inserção Label e Checkbox Opções Alvos **********/

    /****** Inserção Label e Checkbox Parâmetros ************/
    this->label = new Gtk::Label("Parâmetros:");
    this->elementos_tab.put(*this->label, 230, 50);
    this->elementos_tab.put(this->parametros_opcao, 325, 46);
    this->parametros_opcao.set_size_request(280);
    /****** Inserção Label e Checkbox Parâmetros ************/

    /* Inicio - Nova linha inserção de endereços de origem, porta origem*/

    this->label = new Gtk::Label("Origem:");
    this->elementos_tab.put(*this->label, 10, 95);
    this->elementos_tab.put(this->endereco_origem, 70, 91);

    this->not_endereco_origem.set_label("Negar");
    this->elementos_tab.put(this->not_endereco_origem, 235, 92);

    this->label = new Gtk::Label("Porta Origem:");
    this->elementos_tab.put(*this->label, 330, 95);
    this->porta_origem.set_size_request(100);
    this->elementos_tab.put(this->porta_origem, 430, 91);
    this->porta_origem.set_sensitive(false);

    this->not_porta_origem.set_label("Negar");
    this->elementos_tab.put(this->not_porta_origem, 600, 92);
    this->not_porta_origem.set_sensitive(false);

    /* Fim - Nova linha inserção de endereços de origem, porta origem*/

    this->label = new Gtk::Label("Destino:");
    this->elementos_tab.put(*this->label, 10, 130);
    this->elementos_tab.put(this->endereco_destino, 70, 126);

    this->not_endereco_destino.set_label("Negar");
    this->elementos_tab.put(this->not_endereco_destino, 235, 128);

    this->label = new Gtk::Label("Porta Destino:");
    this->elementos_tab.put(*this->label, 330, 130);
    this->porta_destino.set_size_request(100);
    this->elementos_tab.put(this->porta_destino, 430, 126);
    this->porta_destino.set_sensitive(false);

    this->not_porta_destino.set_label("Negar");
    this->elementos_tab.put(this->not_porta_destino, 600, 128);
    this->not_porta_destino.set_sensitive(false);

    /*
     * Recebe os dados da interface de rede
     * e permite escolher se a interface é de entrada ou saida
     */
    this->label = new Gtk::Label("Inter. Rede:");
    this->elementos_tab.put(*this->label, 690, 95);
    this->interface_rede_tabela.set_size_request(100);
    this->elementos_tab.put(this->interface_rede_tabela, 780, 91);
    this->not_interface.set_label("Negar");
    this->elementos_tab.put(this->not_interface, 880, 93);

    /*
     * Radio button para setar se é uma interface
     * de entrada ou saída
     */
    Gtk::RadioButton::Group grupo = this->saida.get_group();
    this->saida.set_label("Saída");
    this->saida.set_sensitive(false);
    this->elementos_tab.put(this->saida, 690, 128);
    this->entrada.set_group(grupo);
    this->entrada.set_sensitive(false);
    this->entrada.set_label("Entrada");
    this->elementos_tab.put(this->entrada, 780, 128);

    /*
     * Inserção de protocolos
     */
    this->label = new Gtk::Label("Protocolo:");
    this->elementos_tab.put(*this->label, 10, 175);
    this->elementos_tab.put(this->protocolo, 85, 169);
    this->protocolo.set_size_request(120);
    this->carrega_protocolos();
    this->protocolo.signal_changed().connect(sigc::mem_fun(*this, &INTERFACE::carrega_argumentos_protocolo));

    this->not_protocolo.set_label("Negar");
    this->elementos_tab.put(this->not_protocolo, 205, 175);

    this->label = new Gtk::Label("Argumentos Proto.:");
    this->elementos_tab.put(*this->label, 300, 175);
    this->elementos_tab.put(this->argumento_protocolo, 440, 169);
    this->argumento_protocolo.set_size_request(120);
    this->argumento_protocolo.signal_changed().connect(sigc::mem_fun(*this, &INTERFACE::habilita_parametros_protocolo));

    this->label = new Gtk::Label("Parâmetros Proto.:");
    this->elementos_tab.put(*this->label, 595, 175);
    this->elementos_tab.put(this->parametros_protocolo, 730, 171);
    this->parametros_protocolo.set_size_request(230);


    /* Linha da inserção de módulos */
    this->label = new Gtk::Label("Módulos:");
    this->elementos_tab.put(*this->label, 10, 220);
    this->modulo.set_size_request(120);
    this->carrega_modulos();
    this->modulo.signal_changed().connect(sigc::mem_fun(*this, &INTERFACE::carrega_argumentos_mod));
    this->elementos_tab.put(this->modulo, 85, 214);

    this->label = new Gtk::Label("Argumentos Mód.:");
    this->elementos_tab.put(*this->label, 300, 220);
    this->argumento_modulo.set_size_request(120);
    this->elementos_tab.put(this->argumento_modulo, 440, 214);
    this->argumento_modulo.append(" ");

    this->label = new Gtk::Label("Parâmetros Mód.:");
    this->elementos_tab.put(*this->label, 595, 220);
    this->elementos_tab.put(this->parametros_modulo, 730, 216);
    this->parametros_modulo.set_size_request(230);


    this->inserir_regra.set_label(BTN_INSERIR_REGRA);
    this->inserir_regra.set_size_request(250, 40);
    this->inserir_regra.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::insere_altera_regras_firewall));
    this->elementos_tab.put(this->inserir_regra, 170, 260);

    this->limpar_regra.set_label(BTN_LIMPAR_CAMPOS);
    this->limpar_regra.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::limpar_regras_firewall));
    this->limpar_regra.set_size_request(250, 40);
    this->elementos_tab.put(this->limpar_regra, 470, 260);

    this->status.set_size_request(-1, 20);
    this->vbox_tab.pack_start(this->status, true, true, 0);

    /**************************************************************/
    /******************** Inicial - Tabela ************************/
    /**************************************************************/

    this->scr_tab.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
    this->scr_tab.add(this->trfirewall);
    this->scr_tab.set_size_request(-1, 200);
    this->trfirewall.get_regras_firewall();
    this->vbox_tab.pack_start(this->scr_tab, true, true, 0);

    this->recarregar_regras_firewall.set_label(BTN_ATUALIZAR_REGRAS);
    this->recarregar_regras_firewall.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::upload_regras_firewall));
    this->vbox_tab.pack_start(this->recarregar_regras_firewall, false, false, 0);

    /**************************************************************/
    /********************** Fim - Tabela **************************/
    /**************************************************************/

    /**************************************************************/
    /***************** Inicio - Filtro de Pacotes *****************/
    /**************************************************************/

    this->notebook.append_page(this->vbox_fp, "Filtro de Pacotes");

    this->vbox_fp.pack_start(this->elementos_fp, false, false, 0);

    this->label = new Gtk::Label("Interface de Rede:");
    this->elementos_fp.put(*this->label, 10, 5);
    this->elementos_fp.put(this->interface_rede_fp, 175, 0);
    this->interface_rede_fp.set_size_request(100);

    this->label = new Gtk::Label("Regra Filtro:");
    this->elementos_fp.put(*this->label, 10, 40);

    this->regra_fp.set_size_request(705, -1);
    this->elementos_fp.put(this->regra_fp, 175, 40);
    this->carrega_regras_filtro();

    this->label = new Gtk::Label("Quantidade de Pacotes:");
    this->elementos_fp.put(*this->label, 10, 78);
    this->adj_quant_fp = Gtk::Adjustment::create(QUANT_INICIO, QUANT_MIN, QUANT_MAX, QUANT_INCREMENTO);
    this->quant_fp.set_wrap();
    this->quant_fp.set_adjustment(this->adj_quant_fp);
    this->elementos_fp.put(this->quant_fp, 175, 74);

    this->ok_fp.set_label(BTN_FILTRAR_OK);
    this->ok_fp.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::executa_filtro));
    this->ok_fp.set_size_request(250, 40);
    this->elementos_fp.put(this->ok_fp, 375, 146);

    this->label = new Gtk::Label("Filtrar resultados:");
    this->hbox_result_filter.pack_start(*this->label, false, true, 0);
    this->filter_result.append("Origem");
    this->filter_result.append("Porta Origem");
    this->filter_result.append("Destino");
    this->filter_result.append("Porta Destino");
    this->filter_result.append("Protocolo");
    this->hbox_result_filter.pack_start(this->filter_result, true, true, 0);
    this->exec_result_filter.set_label(BTN_FILTRAR_RESULTADOS_OK);
    this->exec_result_filter.set_size_request(150);
    this->hbox_result_filter.pack_start(this->exec_result_filter, false, true, 0);
    this->vbox_fp.pack_start(this->hbox_result_filter, false, true, 0);
    this->exec_result_filter.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::exec_filter_result));

    /* Inserção da TreeView com resultados da filtragem */
    this->scr_filtro.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
    this->scr_filtro.add(this->trfilter);
    this->vbox_fp.pack_start(this->scr_filtro, true, true, 0);
    /* Fim da inserção da TreeView */

    this->create_by_row.set_label(BTN_CRIAR_REGRAS_FIREWALL);
    this->create_by_row.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::create_by_row_filter));
    this->hbox_button.pack_start(this->create_by_row, true, true, 0);

    this->delete_row.set_label(BTN_EXCLUIR_FILTRO_LINHAS);
    this->delete_row.signal_clicked().connect(sigc::mem_fun(*this, &INTERFACE::delete_row_filter));
    this->hbox_button.pack_start(this->delete_row, true, true, 0);

    this->vbox_fp.pack_start(this->hbox_button, false, true, 0);

    this->dispatcher.connect(sigc::mem_fun(*this, &INTERFACE::exec_dispatcher));

    /**************************************************************/
    /****************** Fim - Filtro de Pacotes *******************/
    /**************************************************************/

    this->cliente_fw.add(this->principal);
    this->cliente_fw.show_all();

    this->get_interface();
    
    /* Fecha conexão após fazer download de dados necessário para utilização do programa */
    close(this->sock);

    Gtk::Main::run(this->cliente_fw);
}

/*
 * Método que gera mensagens de alertas.
 */
bool INTERFACE::mensagem(string principal, string secundaria, Gtk::MessageType mensagem, Gtk::ButtonsType botao) {
    Gtk::MessageDialog dialog(this->cliente_fw, principal, false, mensagem, botao);

    dialog.set_secondary_text(secundaria);

    /* caso seja inserido um botão de ok cancelar interpreta o resultado */
    if ((botao == Gtk::BUTTONS_OK_CANCEL) || (botao == Gtk::BUTTONS_YES_NO)) {

        int acao = dialog.run();

        if ((acao == Gtk::RESPONSE_OK) || (acao == Gtk::RESPONSE_YES)) return true;

        else return false;
    } else dialog.run();

    return false;
}

/*
 * Método que limpa janela de inserção de regras
 */
void INTERFACE::limpar_regras_firewall() {
    string btn;
    btn.clear();

    btn = this->inserir_regra.get_label();

    /* Caso seja uma operação de alteração de regra */
    if (btn == BTN_ALTERAR_REGRA) {
        this->tabela.set_sensitive(true);
        this->chain.set_sensitive(true);

        this->inserir_regra.set_label(BTN_INSERIR_REGRA);
        this->limpar_regra.set_label(BTN_LIMPAR_CAMPOS);

        if (this->politica_padrao.get_active()) {
            this->politica_padrao.set_active(false);
            this->opcoes_gera_politica_padrao();
        }
    }

    this->flag_linha.clear();

    this->linha.set_text("0");
    this->tabela.set_active(-1);
    this->chain.remove_all();
    this->alvo.remove_all();
    this->opcao_alvo.remove_all();

    this->parametros_opcao.set_sensitive(true);
    this->parametros_opcao.set_text("");
    this->endereco_origem.set_text("");
    this->not_endereco_origem.set_active(false);
    this->porta_origem.set_text("");
    this->porta_origem.set_sensitive(false);
    this->not_porta_origem.set_active(false);
    this->not_porta_origem.set_sensitive(false);
    this->endereco_destino.set_text("");
    this->not_endereco_destino.set_active(false);
    this->porta_destino.set_text("");
    this->porta_destino.set_sensitive(false);
    this->not_porta_destino.set_active(false);
    this->not_porta_destino.set_sensitive(false);
    this->interface_rede_tabela.set_active(-1);
    this->not_interface.set_active(false);
    this->modulo.set_active(-1);
    this->argumento_modulo.remove_all();
    this->parametros_modulo.set_text("");
    this->protocolo.set_active_text("");
    this->argumento_protocolo.set_active_text("");
    this->parametros_protocolo.set_text("");
    this->not_protocolo.set_active(false);

    this->trfirewall.reordena_tabela_chain("", "");
}

/*
 * Método que manipula janela inserção de regras
 * para que possa alterar politica padrão
 * bloqueando os campos desnecessarios
 */
void INTERFACE::opcoes_gera_politica_padrao() {
    bool regra_padrao;

    regra_padrao = this->politica_padrao.get_active();

    if (regra_padrao) {
        this->inserir_regra.set_label(BTN_ALTERAR_REGRA);
        this->limpar_regra.set_label(BTN_CANCELAR_INS);
        this->trfirewall.get_politica_padrao();
    } else {
        this->inserir_regra.set_label(BTN_INSERIR_REGRA);
        this->limpar_regra.set_label(BTN_LIMPAR_CAMPOS);
        this->trfirewall.get_regras_firewall();
    }

    /*
     * Na linhas abaixo quando e selecionado a opção "Política Padrão"
     * é desabilitado os opções
     */

    this->alterar->set_sensitive(!regra_padrao);
    this->excluir->set_sensitive(!regra_padrao);

    this->linha.set_text("0");
    this->linha.set_sensitive(!regra_padrao);
    this->tabela.set_active(-1);
    this->chain.remove_all();
    this->alvo.remove_all();

    this->opcao_alvo.set_sensitive(!regra_padrao);
    this->parametros_opcao.set_sensitive(!regra_padrao);
    this->parametros_opcao.set_text("");
    this->endereco_origem.set_sensitive(!regra_padrao);
    this->endereco_origem.set_text("");
    this->not_endereco_origem.set_sensitive(!regra_padrao);
    this->not_endereco_origem.set_active(false);
    this->porta_origem.set_sensitive(false);
    this->porta_origem.set_text("");
    this->not_porta_origem.set_sensitive(false);
    this->not_porta_origem.set_active(false);
    this->endereco_destino.set_sensitive(!regra_padrao);
    this->endereco_destino.set_text("");
    this->not_endereco_destino.set_sensitive(!regra_padrao);
    this->not_endereco_destino.set_active(false);
    this->porta_destino.set_sensitive(false);
    this->porta_destino.set_text("");
    this->not_porta_destino.set_sensitive(false);
    this->not_porta_destino.set_active(false);
    this->interface_rede_tabela.set_sensitive(!regra_padrao);
    this->interface_rede_tabela.set_active(-1);
    this->not_interface.set_sensitive(!regra_padrao);
    this->not_interface.set_active(false);
    this->modulo.set_sensitive(!regra_padrao);
    this->modulo.set_active(-1);
    this->argumento_modulo.set_sensitive(!regra_padrao);
    this->parametros_modulo.set_sensitive(!regra_padrao);
    this->parametros_modulo.set_text("");
    this->protocolo.set_sensitive(!regra_padrao);
    this->protocolo.set_active_text("");
    this->argumento_protocolo.set_sensitive(!regra_padrao);
    this->argumento_protocolo.set_active_text("");
    this->parametros_protocolo.set_text("");
    this->parametros_protocolo.set_sensitive(!regra_padrao);
    this->not_protocolo.set_sensitive(!regra_padrao);
    this->not_protocolo.set_active(false);
}

/*
 * Método que gera conteudo do alvo caso exista
 * caso contrario retorna string vazia
 */
string INTERFACE::get_parametros_opcao_alvo() {
    string opcao, parametros;

    opcao = this->opcao_alvo.get_active_text();
    parametros = this->parametros_opcao.get_text();

    return ((opcao.empty() || parametros.empty()) ? "NULL" : (" \'" + parametros + "\'"));
}

/*
 * Método que retorna o endereço de origem
 */
string INTERFACE::get_endereco_origem() {
    string endereco;
    endereco = this->endereco_origem.get_text();

    return (endereco.empty() ? "NULL" : (" \'" + endereco + "\'"));
}

/*
 * Método que retorna endereço de destino
 */
string INTERFACE::get_endereco_destino() {
    string endereco;
    endereco = this->endereco_destino.get_text();

    return (endereco.empty() ? "NULL" : (" \'" + endereco + "\'"));
}

/*
 * Método que retorna interface de rede selecionada
 */
string INTERFACE::get_interface_rede_firewall() {
    string interfac;
    interfac = this->interface_rede_tabela.get_active_text();

    return (interfac.empty() ? "NULL" : (" \'" + interfac + "\'"));
}

/*
 * Método que retorna i - se Saída ou o - se entrada
 */
string INTERFACE::get_interface_rede_saida_entrada() {
    bool entrada;
    string interfac;
    interfac = this->interface_rede_tabela.get_active_text();
    entrada = this->entrada.get_active();

    return (interfac.empty() ? "NULL" : (entrada ? " \'i\'" : " \'o\'"));
}

/*
 * Método que retorna parametros do modulos
 */
string INTERFACE::get_parametros_modulos() {
    string modulo, argumento, parametros;
    modulo = this->modulo.get_active_text();
    argumento = this->argumento_modulo.get_active_text();
    parametros = this->parametros_modulo.get_text();

    return ((modulo.empty() || argumento.empty() || parametros.empty()) ? "NULL" : ("\'" + parametros + "\'"));
}

